package com.kbbywyclient.di;

import android.content.Context;

import com.kbbywyclient.di.component.ApplicationRecordComponent;
import com.kbbywyclient.di.component.BankCardInfoComponent;
import com.kbbywyclient.di.component.BankCardManageComponent;
import com.kbbywyclient.di.component.BoughtTableComponent;
import com.kbbywyclient.di.component.BoughtTableCreditComponent;
import com.kbbywyclient.di.component.CardHolderInfoComponent;
import com.kbbywyclient.di.component.ClerkDetailsComponent;
import com.kbbywyclient.di.component.CommissionWithdrawComponent;
import com.kbbywyclient.di.component.CommonQuestionComponent;
import com.kbbywyclient.di.component.CustomerTableComponent;
import com.kbbywyclient.di.component.ErrorCorrectionComponent;
import com.kbbywyclient.di.component.IndexComponent;
import com.kbbywyclient.di.component.InfoCertifyCreditComponent;
import com.kbbywyclient.di.component.InfoCertifyLoanComponent;
import com.kbbywyclient.di.component.LoginComponent;
import com.kbbywyclient.di.component.MainComponent;
import com.kbbywyclient.di.component.MatchTableComponent;
import com.kbbywyclient.di.component.MineLoanComponent;
import com.kbbywyclient.di.component.MinePartnerComponent;
import com.kbbywyclient.di.component.MinePartnerDetailsComponent;
import com.kbbywyclient.di.component.MinePromotionComponent;
import com.kbbywyclient.di.component.MineScoreComponent;
import com.kbbywyclient.di.component.ModifyInfoComponent;
import com.kbbywyclient.di.component.MyBusinessConComponent;
import com.kbbywyclient.di.component.NewMainComponent;
import com.kbbywyclient.di.component.ProductManageComponent;
import com.kbbywyclient.di.component.ProductTableComponent;
import com.kbbywyclient.di.component.PwdModifyComponent;
import com.kbbywyclient.di.component.RechargeComponent;
import com.kbbywyclient.di.component.RecommendRecordComponent;
import com.kbbywyclient.di.component.RecommendScoreComponent;
import com.kbbywyclient.di.component.RegisterComponent;
import com.kbbywyclient.di.component.RetrievePwdOneComponent;
import com.kbbywyclient.di.component.RetrievePwdThreeComponent;
import com.kbbywyclient.di.component.RetrievePwdTwoComponent;
import com.kbbywyclient.di.component.ScoreDetailComponent;
import com.kbbywyclient.di.component.SetRewardComponent;
import com.kbbywyclient.di.component.SettingComponent;
import com.kbbywyclient.di.component.ShareFaceToFaceComponent;
import com.kbbywyclient.di.component.TaskComponent;
import com.kbbywyclient.di.component.VerifyPhoneComponent;
import com.kbbywyclient.di.component.WithdrawRecordComponent;
import com.kbbywyclient.di.module.ApplicationRecordModule;
import com.kbbywyclient.di.module.BankCardInfoModule;
import com.kbbywyclient.di.module.BankCardManageModule;
import com.kbbywyclient.di.module.BoughtTableCreditModule;
import com.kbbywyclient.di.module.BoughtTableModule;
import com.kbbywyclient.di.module.CardHolderInfoModule;
import com.kbbywyclient.di.module.ClerkDetailsModule;
import com.kbbywyclient.di.module.CommissionWithdrawModule;
import com.kbbywyclient.di.module.CommonQuestionModule;
import com.kbbywyclient.di.module.CustomerTableModule;
import com.kbbywyclient.di.module.ErrorCorrectionModule;
import com.kbbywyclient.di.module.IndexModule;
import com.kbbywyclient.di.module.InfoCertifyCreditModule;
import com.kbbywyclient.di.module.InfoCertifyLoanModule;
import com.kbbywyclient.di.module.LoginModule;
import com.kbbywyclient.di.module.MainModule;
import com.kbbywyclient.di.module.MatchTableModule;
import com.kbbywyclient.di.module.MineLoanModule;
import com.kbbywyclient.di.module.MinePartnerDetailsModule;
import com.kbbywyclient.di.module.MinePartnerModule;
import com.kbbywyclient.di.module.MinePromotionModule;
import com.kbbywyclient.di.module.MineScoreModule;
import com.kbbywyclient.di.module.ModifyInfoModule;
import com.kbbywyclient.di.module.MyBusinessConModule;
import com.kbbywyclient.di.module.NewMainModule;
import com.kbbywyclient.di.module.ProductManageModule;
import com.kbbywyclient.di.module.ProductTableModule;
import com.kbbywyclient.di.module.PwdModifyModule;
import com.kbbywyclient.di.module.RechargeModule;
import com.kbbywyclient.di.module.RecommendRecordModule;
import com.kbbywyclient.di.module.RecommendScoreModule;
import com.kbbywyclient.di.module.RegisterModule;
import com.kbbywyclient.di.module.RetrievePwdOneModule;
import com.kbbywyclient.di.module.RetrievePwdThreeModule;
import com.kbbywyclient.di.module.RetrievePwdTwoModule;
import com.kbbywyclient.di.module.ScoreDetailModule;
import com.kbbywyclient.di.module.SetRewardModule;
import com.kbbywyclient.di.module.SettingModule;
import com.kbbywyclient.di.module.ShareFaceToFaceModule;
import com.kbbywyclient.di.module.TaskModule;
import com.kbbywyclient.di.module.VerifyPhoneModule;
import com.kbbywyclient.di.module.WithdrawRecordModule;
import com.kbbywyclient.service.ApiService;

import javax.inject.Singleton;

import dagger.Component;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;

/**
 * Created by FHW
 * on 2017/3/21
 */

@Singleton
@Component(modules = {AppModule.class, NetworkModule.class})
public interface AppComponent {

    Context context();

    OkHttpClient getOkHttpClient();

    Retrofit getRetrofit();

    ApiService getApiService();

    //activity  暴露对应activity的component
    MainComponent getMainComponent(MainModule mainModule);

    RegisterComponent getRegisterComponent(RegisterModule registerModule);

    LoginComponent getLoginComponent(LoginModule loginModule);

    RetrievePwdOneComponent getRetrievePwdOneComponent(RetrievePwdOneModule retrievePwdOneModule);

    RetrievePwdTwoComponent getRetrievePwdTwoComponent(RetrievePwdTwoModule retrievePwdOneModule);

    RetrievePwdThreeComponent getRetrievePwdThreeComponent(RetrievePwdThreeModule retrievePwdThreeModule);

    MatchTableComponent getMatchTableComponent(MatchTableModule matchTableModule);

    ProductTableComponent getProductTableComponent(ProductTableModule productTableModule);

    BoughtTableComponent getBoughtTableComponent(BoughtTableModule boughtTableModule);

    CustomerTableComponent getCustomerTableComponent(CustomerTableModule customerTableModule);

    BoughtTableCreditComponent getBoughtTableCreditComponent(BoughtTableCreditModule boughtTableCreditModule);

    RechargeComponent getRechargeComponent(RechargeModule rechargeModule);

    MineScoreComponent getMineScoreComponent(MineScoreModule minescoremodule);

    ModifyInfoComponent getModifyInfoComponent(ModifyInfoModule modifyInfoModule);

    SettingComponent getSettingComponent(SettingModule settingModule);

    InfoCertifyLoanComponent getInfoCertifyLoanComponent(InfoCertifyLoanModule infoCertifyLoanModule);

    InfoCertifyCreditComponent getInfoCertifyCreditComponent(InfoCertifyCreditModule infoCertifyCreditModule);

    PwdModifyComponent getPwdModifyComponent(PwdModifyModule pwdModifyModule);

    ScoreDetailComponent getScoreDetailComponent(ScoreDetailModule scoreDetailModule);

    RecommendScoreComponent getRecommendScoreComponent(RecommendScoreModule recommendScoreModule);

    ProductManageComponent getProductManageComponent(ProductManageModule productManageModule);

    ErrorCorrectionComponent getErrorCorrectionComponent(ErrorCorrectionModule errorCorrectionModule);

    MyBusinessConComponent getMyBusinessConComponent(MyBusinessConModule myBusinessConModule);

    NewMainComponent getNewMainComponent(NewMainModule newMainModule);

    IndexComponent getIndexComponent(IndexModule indexModule);

    TaskComponent getTaskComponent(TaskModule taskModule);

    ShareFaceToFaceComponent getShareFaceToFaceComponent(ShareFaceToFaceModule faceToFaceModule);

    MineLoanComponent getMineLoanComponent(MineLoanModule loanModule);

    MinePromotionComponent getMinePromotionComponent(MinePromotionModule promotionModule);

    WithdrawRecordComponent getWithdrawRecordComponent(WithdrawRecordModule recordModule);

    CommonQuestionComponent getCommonQuestionComponent(CommonQuestionModule questionModule);

    CardHolderInfoComponent getCardHolderInfoComponent(CardHolderInfoModule infoModule);

    BankCardInfoComponent getBankCardInfoComponent(BankCardInfoModule infoModule);

    VerifyPhoneComponent getVerifyPhoneComponent(VerifyPhoneModule phoneModule);

    RecommendRecordComponent getRecommendRecordComponent(RecommendRecordModule recordModule);

    ApplicationRecordComponent getApplicationRecordComponent(ApplicationRecordModule recordModule);

    BankCardManageComponent getBankCardManageComponent(BankCardManageModule manageModule);

    CommissionWithdrawComponent getCommissionWithdrawComponent(CommissionWithdrawModule withdrawModule);

    MinePartnerComponent getMinePartnerComponent(MinePartnerModule minePartnerModule);

    ClerkDetailsComponent getClerkDetailsComponent(ClerkDetailsModule clerkDetailsModule);

    SetRewardComponent getSetRewardComponent(SetRewardModule setRewardModule);

    MinePartnerDetailsComponent getMinePartnerDetailsComponent(MinePartnerDetailsModule detailsModule);
}
